home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 21
/
Cream of the Crop 21 (Terry Blount) (October 1996).iso
/
os2
/
freetype.zip
/
freetype.txt
< prev
next >
Wrap
Text File
|
1996-09-07
|
18KB
|
458 lines
Welcome to the
F R E E T Y P E P R O J E C T
The FREE TrueType Font Engine
Copyright 1996 David Turner
This document is an introduction to the FreeType project, a very
efficient and fast, though portable, TrueType font rendering engine
*freely available*. The reader's good knowledge of the TrueType
Font specification is not required, though being a indeniable
"plus".
---------------------------------------------------------------------
TABLE OF CONTENTS :
Introduction :
I. Engine Design Goals :
1. Easy Maintenance
2. System Independance
3. Reliability
4. High Quality
5. Speed !
II. Engine Architecture :
1. Component Hierarchy
2. Runtime Execution
II. Internals :
1. Engine Memory Management.
2. Rasterizer mechanics.
3. Interpreting TrueType opcodes.
III. Engine Characteristics :
1. Differences found between TrueType specs and real-world
font files.
2. Engine's behaviour with incorrect font files or glyphs.
IV. What to do now ? :
1. Debug the whole interpreter..
2. Add more character-oriented functions.
3. Porting considerations ( IMPORTANT ).
--------------------------------------------------------------------
Introduction :
--------------
Managing fonts can be a serious task !
In these good old days when all we had were dot-matrix printers,
it was common practice to use bitmap files to print and/or display
text. This could lead to the use of a lot of disk space, as each
pointsize of a same typeface had to be bitmapped in a separate file.
Moreover, it made creating new typefaces incredibly slow and
painful, as the file for each size had to be generated.
The first system which included automaticaly-computed bitmap
files from a description was undoubtly Metafonts, part of the TeX
package from Donald Knuth, which is still widely used in academia
and research nowadays ! Metafonts is a font specification language
and bitmap generator. It produces the bitmaps that the TeX program
uses to generate its 'DVI' ( DeVice-Independent ) files.
Unlike modern systems, it's a stand-alone product that is not
integrated into TeX, and does not work "on-demand". It must be run
by the user before any TeX processing to generate the bitmap files.
Metafonts was a masterpiece at the time it was invented, and in
many ways, it still is, with features that have yet to come to
modern systems ( like family-generation : give him the description
of an A, and it will generate all others letters of the alphabet
with the same style !! ).
Metafonts did not resolve the disk space problem, it just
automated the bitmap generation and made it fairly easy. Meanwhile,
the advent of laser printers and graphical environments urged the
need for a suitable 'on-demand' font rendering system. Not
surprisingly, Adobe which led the laser revolution with its
Postcript printing language, proposed the Type 1 Font Format. This
format is based on a vector specification of each glyph as well as
the presence of small instructions, called 'hinting', to help
preserve some aesthetics properties of the fonts when rendering to
small sizes ( like keeping the width of the two vertical bars of a H
the same, for example ). As Type 1 was one of Postcript's key
points, laser printers became the choice of quality of many, as the
quality of the printed texts out-performed by far dot-matrix.
A Type 1 font was typically downloaded into the laser printer's
memory, where all rendering calculations took place; there was no
need for extra work from the computer. This is why early windowing
systems started to allow printing with Type 1 fonts on Postcript
printers, while keeping their weak bitmap files for display.
Moreover, Adobe refused to license the font rendering code to Apple
and Microsoft. The two software giants decided then to team up to
create a new font technology, today known as 'TrueType'. Few weeks
after they had agreed, Adobe announced ATM ( Adobe Type Manager ), a
product that allowed ( and still does ! ) Macintosh and Windows
owner to display Type 1 fonts and (at last) do some real WYSIWYG.
What is funny is that neither products were even written on paper at
that time.
Adobe benefited from the vast momentum of already available Type
1 fonts, most Typeface designers having been converted to their
format. It is still widely used in corporations where the quality
of the fonts used is important ( Publishing, Advertising, .. ),
while TrueType, which finally came out and became part of System 7
and Windows 3.0, is a source of free or cheap low-level fonts for a
lot of every-day jobs. Though, more and more new fonts are proposed
in both formats today.
So the question is : why make a TrueType engine rather than a
Type 1 one ?
Well, few years ago, if someone wanted some good quality fonts,
one had to purchase them in Type 1 format from professional
designers. This seems not to be so true today, after we bought so
many of these troublesome but cheap Windows PCs. Moreover, the
TrueType specification includes a much better hinting facility :
you can actually *read* TrueType fonts at 12 pts on a VGA screen,
while this is unlikely with ATM whose rendering of small sizes is
jerky, to say the least ( just ask any OS/2 user out there !! ).
Finally, there *is* already a freely available Type 1 renderer,
donated by IBM to the X Consortium. Look for source distributions
of X11r6 for it ! It works, the source isn't really readable ( IMHO
) and suffers from a "weird" implementation ( still IMHO ), to be
polite !
The FreeType project aims the development of a TrueType engine
that can be easily ported across platforms, while being fast,
accurate and stable. Simply.
I. Engine Design Goals :
------------------------
This section describes the several goals the engine has been
developped for :
- Easy maintenance :
In an age where all 'serious' programming is done in C or C++,
the author decided to code the engine in PASCAL ! This may
seem rather weird, but this language comes on the PC with
high-quality programming environments ( namely Borland's for
DOS, and Virtual Pascal on OS/2 ) that allow light-speed
compilation, real module separation and easy debugging.
The drawback of these compilers ( i.e. a poorly, if ever,
optimised generated code ) forced development to focus on
algorithm fine-tuning, rather than clever macro tricks, and
the tendency to optimize 'on the run' so usual of C
programmers ( a practice that easily leads to weird and hardly
maintainable code ).
This approach, though quite constraining at first, paid back
faster than expected. The project is now a well crafted piece
of software, and runs *fast* even under Borland Pascal. This
is unoptimized code, and one could expect a great performance
increase by translating to C and using a good optimizing
compiler like GCC, or even to assembly.
The current version has been compiled and tested on Borland's
16 bits Pascal Compilers ( Turbo-Pascal, Borland-Pascal Real
Mode, and Borland-Pascal DPMI ) as well as the 32 bit OS/2
Virtual Pascal compiler ( a *must-have* ). The 32-bits
version is about 2.5 to 3 times faster than its 16-bit
counterpart. This is mainly due to the fact that most of the
data processed by the engine is 32-bit, a painful task for
16-bit programs..
There exist some small differences between the 16-bit and
32-bit engines, coming from very short bui